import java.util.*;

public class DicDemo {

    protected static void dicLoop() {
        HashMap<String, Integer> monthDic = new HashMap<String, Integer>() {
            // 第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class)
            {
                // 第二层括弧实际上是一个实例初始化块 (instance initializer block)，这个块在内部匿名类构造时被执行

                put("January", 31);
                put("February", 28);
                put("March", 31);
                put("April", 30);
                put("May", 31);
                put("June", 30);
                put("July", 31);
                put("August", 31);
                put("September", 30);
                put("October", 31);
                put("November", 30);
                put("December", 31);
            }
        };

        // 通过HashMap.keySet()得到key集合，通过迭代器Iterator遍历集合得到key和value。
        Iterator<String> iterator = monthDic.keySet().iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            System.out.println("keySet+Iterator, key:" + key + ",\t vaule:" + monthDic.get(key));
        }

        // 通过HashMap.entrySet()得到键值对集合，通过for循环遍历集合得到key和value。
        for (Map.Entry<String,Integer> entry : monthDic.entrySet()) {
            System.out.println("entrySet+for, key:" + entry.getKey() + ",\t vaule:" + entry.getValue());
        }

        // 通过Lambda遍历HashMap得到key和value
        monthDic.forEach((key,value) -> {
            System.out.println("lambda, key:" + key + ",\t vaule:" + value);
        });

    }

    protected static void dicSort() {
        HashMap<String, Integer> monthDic = new HashMap<String, Integer>() {
            // 第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class)
            {
                // 第二层括弧实际上是一个实例初始化块 (instance initializer block)，这个块在内部匿名类构造时被执行

                put("January", 31);
                put("February", 28);
                put("March", 31);
                put("April", 30);
                put("May", 31);
                put("June", 30);
                put("July", 31);
                put("August", 31);
                put("September", 30);
                put("October", 31);
                put("November", 30);
                put("December", 31);
            }
        };

        // key 按默认排序遍历
        ArrayList<String> keyList = new ArrayList<String>(monthDic.keySet());
        Collections.sort(keyList);
        for (String key : keyList) {
            System.out.println("sorted, key:" + key + ",\t vaule:" + monthDic.get(key));
        }

        // key 自定义排序key后 遍历
        Collections.sort(keyList, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // 按第二个字母升序排序
                // 返回1 表示 o1 按升序 排在 o2 后面
                return o1.charAt(1) > o2.charAt(1) ? 1 : -1;
            }
        });
        for (String key : keyList) {
            System.out.println("第二个字母升序排序, key:" + key + ",\t vaule:" + monthDic.get(key));
        }
    }
    protected static void demoLogic() {
        DateTimeDemo.logTs("dicLoop");
        dicLoop();

        DateTimeDemo.logTs("dicSort");
        dicSort();
    }
}
